//#include<iostream>
//#include<string>
//class Shape
//{
//public:
//	virtual void draw() = 0;
//	virtual ~Shape() {};
//};
//class Circle : public Shape
//{
//public:
//	virtual void draw()override
//	{
//		std::cout << "draw a circle" << std::endl;
//	}
//};
//class Rectangle :public Shape
//{
//public:
//	virtual void draw()override
//	{
//		std::cout << "draw a rectangle" << std::endl;
//	}
//};
//class Triangle : public Shape
//{
//public:
//	virtual void draw()override
//	{
//		std::cout << "draw a Triangle" << std::endl;
//	}
//};
//class ShapeFactory
//{
//public:
//	Shape* createShape(const std::string& type)
//	{
//		if (type=="circle")
//		{
//			return new Circle();
//		}
//		else if (type=="rectangle")
//		{
//			return new Rectangle();
//		}
//		else if (type=="triangle")
//		{
//			return new Triangle();
//		}
//		else
//		{
//			std::cout << "type error" << std::endl;
//			return nullptr;
//		}
//	}
//};
//int main()
//{
//	ShapeFactory SF;
//	Shape* sp1=SF.createShape("circle");
//	Shape* sp2 = SF.createShape("rectangle");
//	Shape* sp3 = SF.createShape("triangle");
//	Shape* sp4 = SF.createShape("$&^%^&%&^");
//
//	sp1->draw();
//	sp2->draw();
//	sp3->draw();
//	//sp4->draw();
//	return 0;
//}